﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Cotizav.CONEXION;
using System.Transactions;
using System.Windows.Forms;
using System.Data.Linq;

namespace Cotizav
{
    public class CtrlProvincia
    {
        private ConexionDataContext conexion;
        private CtrlDistrito controlador;

        internal List<PROVINCIA> getListProvincia()
        {
            using (conexion = new ConexionDataContext())
            {
                return conexion.PROVINCIA.Where(x => x.eliminado == 0).ToList();
            }
        }

        internal System.Windows.Forms.DialogResult registrarProvincia(PROVINCIA prov)
        {
            using (TransactionScope transactionScope = new TransactionScope())
            {
                using (conexion = new ConexionDataContext())
                {
                    try
                    {
                        DialogResult result = DialogResult.Cancel;

                        //insertamos el id
                        int correlativoProvincia = conexion.COTIZAV_CORRELATIVO.Single(x => x.IDENTIFICADOR == "COTIZAV").PROVINCIA.Value;
                        string num = Convert.ToString(correlativoProvincia);
                        string numero = num.Trim().PadLeft(10, '0');
                        string idProvincia = "PROV_" + numero;

                        prov.idProvincia = idProvincia;

                        //insertamos el sector
                        conexion.PROVINCIA.InsertOnSubmit(prov);
                        conexion.SubmitChanges();
                        conexion.increm_ContProvincia();

                        transactionScope.Complete();
                        result = DialogResult.OK;

                        return result;
                    }
                    catch (Exception)
                    {
                        throw;
                    }
                }
            }
        }

        internal DialogResult actualizarProvincia(PROVINCIA pro)
        {
            using (TransactionScope transactionScope = new TransactionScope())
            {
                using (conexion = new ConexionDataContext())
                {
                    try
                    {                                                
                        CONEXION.PROVINCIA prov = conexion.PROVINCIA.Single(x => x.idProvincia == pro.idProvincia);
                        DialogResult result = DialogResult.Cancel;
                        //actualizamos
                        prov.nombreProvincia = pro.nombreProvincia;
                        prov.eliminado = pro.eliminado;

                        conexion.SubmitChanges();
                        transactionScope.Complete();
                        result = DialogResult.OK;

                        return result;
                    }
                    catch (Exception)
                    {
                        throw;
                    }
                }
            }
        }

        internal void eliminarProvincia(PROVINCIA prov)
        {
            using (TransactionScope transactionScope = new TransactionScope())
            {   
                //actualizamos los distritos que pertenecen a la provincia             
                using (conexion = new ConexionDataContext())
                {
                    try
                    {                        
                        var query = conexion.DISTRITO.Where(x => x.idProvincia == prov.idProvincia && x.eliminado == 0).ToList();

                        controlador = new CtrlDistrito();

                        foreach (DISTRITO d in query)
                        {
                            d.eliminado = 1;                                                        
                            controlador.eliminarDistrito(d);
                        }                        
                    }
                    catch (Exception)
                    {
                        throw;
                    }
                }

                using (conexion = new ConexionDataContext())
                {
                    try
                    {
                        CONEXION.PROVINCIA pro = conexion.PROVINCIA.Single(x => x.idProvincia == prov.idProvincia);
                        //actualizamos
                        pro.eliminado = prov.eliminado;

                        conexion.SubmitChanges();                
                        transactionScope.Complete();
                    }
                    catch (Exception)
                    {
                        
                        throw;
                    }
                }
            }
        }
    }
}
